package org.springframework.security.crypto.password;

/**
 * @author Dillon
 * @date 2024/7/8
 * @slogan 致敬大师 致敬未来的你
 * @desc 密码加密接口，可实现该接口提供自定义的加密实现类
 */
public interface PasswordEncoder {

	/**
	 * 加密密码，返回加密后的密文
	 *
	 * @param rawPassword 原密码
	 * @return 加密密码
	 */
	String encode(CharSequence rawPassword);

	/**
	 * 原密码是否和加密后密码匹配
	 *
	 * @param rawPassword     原密码
	 * @param encodedPassword 加密后密码
	 * @return 是否匹配
	 */
	boolean matches(CharSequence rawPassword, String encodedPassword);

	/**
	 * 是否需要执行密码升级
	 *
	 * @param encodedPassword 加密密码
	 * @return 是否执行密码升级
	 */
	default boolean upgradeEncoding(String encodedPassword) {
		return false;
	}

}
